跳到主要内容

面试题 05.02.二进制数转字符串

· 阅读需 2 分钟

1、题干

二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。

示例1:

 输入:0.625
输出:"0.101"

示例2:

 输入:0.1
输出:"ERROR"
提示:0.1无法被二进制准确表示

 

提示:

  • 32位包括输出中的 "0." 这两位。
  • 题目保证输入用例的小数位数最多只有 6

2、思路1-数学模拟

将小数 num 倍乘 2,所得结果的整数部分累加到结果字符串,小数部分赋值给 num,循环上述操作直至 32 次或 num 为 0

3、代码

function printBin(num: number): string {
let ans = '0.'
while (num && ans.length <= 32) {
num = num * 2;
const k = num % 2 >> 0;
ans += k;
num -= k;
}
return ans.length > 32 ? 'ERROR' : ans;
};

4、复杂度

  • 时间复杂度: O(C)O(C)
  • 空间复杂度: O(1)O(1)

5、执行结果

image.png

6、思路2-API

调用内置API toString 实现

7、代码

function printBin(num: number): string {
const ans = num.toString(2);
return ans.length > 32 ? 'ERROR' : ans;
};

8、执行结果

image.png